package map;

import collection.SortInteger;

import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * Map的遍历,支持三种遍历方式:
 * 1.遍历所有的key
 * 2.遍历所有的键值对
 * 3.遍历所有的value(相对不常用)
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("数学",99);
        map.put("语文",98);
        map.put("英语",97);
        map.put("物理",96);
        map.put("化学",95);
        System.out.println(map);//{物理=96, 数学=99, 化学=95, 语文=98, 英语=97}

        /*
            遍历所有的key
            Set<K> keySet()
            将当前map中所有的key以一个Set集合的形式返回
            因为set集合就是不可添加重复元素且无序的 所以这里底层调用的是HashSet
         */
        //遍历key
        Set<String> keySet = map.keySet();
        for (String key : keySet){
            System.out.println("key:"+key);
        }

        //遍历 键值对
        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        for (Map.Entry<String,Integer> e : entrySet){
            String key = e.getKey();//获取key的值
            Integer value = e.getValue();//获取value的值
            System.out.println("key:"+key+","+"value:"+value);
        }

        //遍历value
        /*
           Collection values()
           将当前map中的所有value以一个集合的形式返回
         */
        Collection<Integer> values = map.values();
        for (Integer value : values){
            System.out.println("value:"+value);
        }

        values.forEach( System.out::println);

        map.forEach((k,v)->{System.out.println(k+":"+v);});

        map.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String s, Integer integer) {
                System.out.println();
            }
        });

    }
}
